iT邦幫忙

3

Indexed Database 資料庫作業初探

timx 2012-07-27 11:21:432790 瀏覽
  • 分享至 

  • xImage
  •  

這一篇談談資料庫作業,還有如何進行資料庫操作的第步,資料庫連線 ...
進行所有資料庫操作之前首先必須完成連線作業,IDBFactory 定義的 open() 方法支援此作業,不過特定的瀏覽針對 IDBFactory 的實作並不相同,若是 Webkit 瀏覽器,必須透過 webkitIndexedDB 進行調用,而 Gecko 瀏覽器則透過 mozIndexedDB 進行調用。

考慮以下的程式碼,其中調用 open() ,並且指定所要開啟的資料庫名稱 KTMS ,將其開啟:

var request = webkitIndexedDB.open('KTMS');

這一行程式碼適用於Webkit 瀏覽器,如果要針對Gecko 瀏覽器設計,則換成mozIndexedDB 即可。當以上的程式碼執行完畢,如果指定開啟的資料庫 KTMS 不存在,則會建立一個新的資料庫,如果已經存在,則會將其開啟。

open() 方法並不會立刻開啟資料庫,它將回傳一個要求的 IDBRequest 物件,並且將其儲存於request 變數,接下來設定這個物件的onsueecss 與 onerror 事件屬性,如下式:

request.onerror = function (event) {
    // 處理錯誤訊息
};
request.onsuccess = function (event) {
    // event.target.result 取得連線的資料庫
};

在 onsuccess事件屬性函式中,透過 event.target.result 取得連線成功的 IDBDatabase 資料庫物件,接下來就可以透過此物件,執行各種資料庫作業,包含物件倉儲的建立以及資料的維護,後文針對這一部份將有進一步的討論。
根據 IDBRequest 定義,其中的 readyState 表示開啟作業狀態,常數 LOADING 與 DONE 是可能的狀況,前者的值是 1 ,表示載外中,後者表示載入完成,其值為 2 。
資料庫不再使用時,可以調用 IDBDatabase 物件的 close() 將其關閉, IDBDatabase 介面定義此方法,以支援資料庫關閉作業,定義如下:

void close();

調用此方法,會將開啟連線的資料庫關閉,不過在連線關閉之前,會先完成所有基於此連線執行的交易作業,然後才會正式關閉連線,而內部的 closePending 旗標會被標示為 true 。

一旦連線關閉完成, closePending 旗標的值被切換至 false ,則無法建立任何新的交易,換句話說,當任何一項交易被建立之前,會預先檢查這個旗標值,是 true 的話表示資料庫連線已經關閉,新的交易無法建立並且產生例外。以下是一個完整的例子:

    <title>開啟與關閉資料庫連線</title>
    <script>
        var db ;  
        var request = webkitIndexedDB.open('KTMS');
        request.onerror = function (event) {
            alert(event.target.errorCode);
        };
        request.onsuccess = function (event) {
            db = event.target.result;
            alert('資料庫開啟[readyState:' + this.readyState + ']');
        };
        function closedb() {
            db.close();
            alert('資料庫關閉 !' );
        }
    </script>

<body onunload="closedb()">

一開始網頁載入,調用 open 開啟名為 KTMS 的資料庫,然後於onsuccess 事件屬性函式中,取得資料庫物件儲存於 db 變數,並且調用 readyState 屬性,顯示目前的狀態。

在 body 元素的 onunload 事件屬性函式 closedb() 當中,透過 db 調用 close() 方法,關閉資料庫連線,由於 unload 事件於網頁關閉後被觸發,因此每一次關閉這個範例網頁時,會緊接著關閉資料庫連線。
這個範例最重要的,在於其開啟資料連線,並且取得資料庫物件 db ,此物件由 IDBDatabase 所定義,接下來所有資料操作,都將這裏開始,接下來從資料庫的結構建立開始,我們逐步解析 IDBDatabase 定義以及相關的資料庫作業。

資料庫包含許多不同的作業,當我們建立一個新的資料庫連線,首先必須針對資料庫建立儲存與管理資料所需的結構,然後進行資料的維護作業,在討論各種作業的細節之前,我們還必須大概談談資料庫的結構。

在資料庫中,資料真正儲存的地方是物件倉儲,一個資料庫必須建立一個或是一個以上的資料倉儲,以提供資料儲存維護管理的需求,而每個倉儲中,儲存為數不定的資料,每一筆資料是一筆記錄(record),透過物件倉儲定義的方法,進行資料的維護。

根據資料庫的結構,我們可以將資料庫作業,分成兩個部份:物件倉儲結構與資料本身的操作。

物件倉儲結構

建立資料庫結構必須從資料庫的版本設定開始,在設定版本的過程中,完成資料庫結構的建置,包含物件倉儲以及索引的建立等等…

資料處理

一旦完成物件倉儲的建立,接下來就可以針對特定的倉儲,進行資料的維護作業,例如「新增」、「刪除」、「修改」以及查詢等等,後續的文章中逐一作討論。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-07-27 11:31:14

如果能再加上執行“過程或結果”畫面,會更一目了然~~灑花

我要留言

立即登入留言